package com.openess.bigsearch.engine.document;

import java.io.FileNotFoundException;

import com.openess.bigsearch.engine.utils.LinkedList;

/**
 * Document对象中，必须包含唯一的ID域
 * 
 * @author TuTu
 * 
 */
public class Document {
	/**
	 * 文档的ID
	 */
	private long id;
	/**
	 * 文档的字符长度
	 */
	private int length;
	/**
	 * 装载Field对象的集合
	 */
	private LinkedList<Field> fields;

	/**
	 * 拿到装有所有Field的数组
	 * 
	 * @return
	 */
	public final Field[] getFields() {
		return fields.toArray(new Field[0]);
	}

	/**
	 * 构造方法，初始化装载Field对象的集合
	 * 
	 * @throws FileNotFoundException
	 */
	public Document() throws FileNotFoundException {
		fields = new LinkedList<Field>();
	}

	/**
	 * 往文档链表中添加指定的域对象，但不保存ID域对象，而是把ID域的信息保存在变量id中
	 * 
	 * @param field
	 */
	public void add(Field field) {
		String fieldName = field.getFieldName();
		// ID域不保存
		if (fieldName.equals("id")) {
			id = Long.valueOf(field.getContent());
		} else if (field.getContent() != null && !field.isEmpty()) {
			// 统计文档长度
			length += field.getFieldLength();
			if (fieldName.equals("content"))
				fields.addFirst(field);
			else
				fields.add(field);
		}
	}

	/**
	 * 根据域名拿到保存的域文本
	 * 
	 * @param fieldName
	 *            域名大小写敏感
	 * @return 如果不存在这个域，那么返回null
	 */
	public String getField(String fieldName) {
		for (Field f : fields) {
			if (f.getFieldName().equalsIgnoreCase(fieldName))
				return f.getContent();
		}
		return null;
	}

	/**
	 * 拿到Document中保存的ID
	 * 
	 * @return
	 */
	public long getID() {
		return id;
	}

	public final int getLength() {
		return length;
	}
}
